import { getTempCatalogs } from "@/api/template/catalog";
import {
  getTempTablePageList,
  getTempTableDetail,
  addTempTableDetail,
  editTempTableDetail,
  setTempTableStatus,
  delTempTableDetail,
  batchDelTempTableDetail
} from "@/api/template/table";
import type { PlusPageInstance } from "plus-pro-components";
import { reactive, ref } from "vue";

// 空数据提示（错误提示）
export const tableEmptyText = ref("");

// 页面组件
export const plusPageRef = ref<PlusPageInstance | null>();

// 状态参数
const state = reactive({
  catalogsCache: [],
  catalogsCacheInit: false
});

type CatalogsOption = {
  /**
   * 是否关闭缓存
   */
  disableCache?: boolean;
};

const request = {
  event: {
    /**
     * 列表页面初始化成功时调用
     * 如果开启了 KeepAlive，会在激活后再次调用
     *
     * @param keepAlive 本次调用是否为 keepAlive 激活调用
     * @returns
     */
    onPageShow: async (keepAlive: boolean): Promise<void> => {
      if (keepAlive) {
        plusPageRef.value?.getList();
      }
      await request.get.catalogsOptions({ disableCache: true });
    }
  },
  get: {
    /**
     * 获取分类options
     *
     * @param option 配置参数
     * @returns
     */
    catalogsOptions: async (option?: CatalogsOption) => {
      if (!option?.disableCache && state.catalogsCacheInit) {
        return state.catalogsCache;
      }
      const result = [];
      const res = (await getTempCatalogs()).data;
      for (const item of res) {
        result.push({
          value: item.id,
          label: item.name
        });
      }
      state.catalogsCache = result;
      state.catalogsCacheInit = true;
      return result;
    },
    /**
     * 获取分页列表
     *
     * @param params 请求参数
     * @returns
     */
    pageList: async (params: object) => {
      try {
        const res = await getTempTablePageList(params);
        tableEmptyText.value = "资料暂无";
        return {
          data: res.data.list,
          total: res.data.total
        };
      } catch (error) {
        tableEmptyText.value = error.message;
      }
    },
    /**
     * 获取详情
     *
     * @param id 请求ID
     * @returns
     */
    detail: async (id: Id) => {
      return (await getTempTableDetail(id)).data;
    }
  },
  post: {
    /**
     * 新增信息
     *
     * @param data 请求参数
     * @returns
     */
    create: async (data: object) => {
      const res = await addTempTableDetail(data);
      return { id: res.data.id };
    }
  },
  put: {
    /**
     * 更新信息
     *
     * @param id 请求ID
     * @param data 请求参数
     */
    update: async (id: Id, data: object) => {
      await editTempTableDetail(id, data);
    },
    /**
     * 更新状态
     *
     * @param id 请求ID
     * @param status 请求状态（布尔）
     */
    setStatus: async (id: Id, status: any) => {
      await setTempTableStatus(id, {
        status
      });
    }
  },
  delete: {
    /**
     * 删除信息
     *
     * @param id 请求ID
     */
    remove: async (id: Id) => {
      await delTempTableDetail(id);
    },
    /**
     * 批量删除信息
     *
     * @param ids 指定的ID
     */
    batch: async (ids: Id[]) => {
      await batchDelTempTableDetail({
        ids
      });
    }
  }
};

export default request;
